package com.ruoyi.system.mapper;

import java.util.List;
import com.ruoyi.system.domain.PetCategory;

/**
 * 宠物分类Mapper接口
 * 
 * @author ruoyi
 * @date 2025-08-30
 */
public interface PetCategoryMapper 
{
    /**
     * 查询宠物分类
     * 
     * @param categoryId 宠物分类主键
     * @return 宠物分类
     */
    public PetCategory selectPetCategoryByCategoryId(Long categoryId);

    /**
     * 查询宠物分类列表
     * 
     * @param petCategory 宠物分类
     * @return 宠物分类集合
     */
    public List<PetCategory> selectPetCategoryList(PetCategory petCategory);

    /**
     * 查询所有有效的宠物分类
     * 
     * @return 宠物分类集合
     */
    public List<PetCategory> selectActivePetCategories();

    /**
     * 新增宠物分类
     * 
     * @param petCategory 宠物分类
     * @return 结果
     */
    public int insertPetCategory(PetCategory petCategory);

    /**
     * 修改宠物分类
     * 
     * @param petCategory 宠物分类
     * @return 结果
     */
    public int updatePetCategory(PetCategory petCategory);

    /**
     * 删除宠物分类
     * 
     * @param categoryId 宠物分类主键
     * @return 结果
     */
    public int deletePetCategoryByCategoryId(Long categoryId);

    /**
     * 批量删除宠物分类
     * 
     * @param categoryIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deletePetCategoryByCategoryIds(Long[] categoryIds);

    /**
     * 校验分类编码是否唯一
     * 
     * @param categoryCode 分类编码
     * @return 结果
     */
    public PetCategory checkCategoryCodeUnique(String categoryCode);

    /**
     * 获取分类及其下的名称列表
     * 
     * @return 分类和名称的映射
     */
    public List<PetCategory> selectCategoriesWithNames();

    /**
     * 查询所有一级分类
     * 
     * @return 一级分类列表
     */
    public List<PetCategory> selectTopLevelCategories();

    /**
     * 根据父ID查询子分类
     * 
     * @param parentId 父分类ID
     * @return 子分类列表
     */
    public List<PetCategory> selectCategoriesByParentId(Long parentId);

    /**
     * 查询所有有效的二级分类（用于主表名称选择）
     * 
     * @return 二级分类列表
     */
    public List<PetCategory> selectActiveSubCategories();
}